<?php
/*
File Name:		config.php
Description: 	Contiene le definizioni dei filtri
Plugin URI:  	http://www.SyriusWeb.com/
Author:      	SyriusWeb
Author URI:  	http://www.SyriusWeb.com/
*/


add_filter('the_content','fascicoli_general_the_content',1000);
function fascicoli_general_the_content($the_content) {
global $post;
    return apply_filters('the_'.$post->post_type.'_content',$the_content);
}

add_filter('the_excerpt','fascicoli_general_the_excerpt',1000);
function fascicoli_general_the_excerpt($the_excerpt) {
    global $post;
    return apply_filters('the_'.$post->post_type.'_excerpt',$the_excerpt);
}


add_filter('the_content','fascicoli_fascicolo_content'); // visualizzo il contenuto del fascicolo
// visualizzazione del contenuto del fascicolo
function fascicoli_fascicolo_content($the_content) {
	global $post;	
	
	// mi assicuro che sia un fascicolo
	if ($post->post_type != 'fascicolo') {
		return $the_content;	
	}
        
	// visto che potrei visualizzare un altro fascicolo nel fascicolo, per non creare loop
	remove_filter('the_content','fascicoli_fascicolo_content');
            
	$vista = get_the_terms( $post->ID, 'view' );
        

    $message='';

    if (!empty($_POST['task'])) {
        do_action($_POST['type'].'_'.$_POST['task'].'_action',$post);
       // $message = apply_filters($_POST['type'].'_task_message',$message);
       // $message = apply_filters($_POST['type'].'_'.$_POST['task'].'_message',$message);
    }



    if ($vista == array()) {
		$view = 'documenti';
		$orderarray['orderby'] = 'code';
        $orderarray['orderby'] = 'post_date';
        $orderarray['order'] = 'asc';
        $orderarray['view_first_only_view'] = false;
        $orderarray['expand_group_view'] = true;
        $orderarray['footer_message_view'] = '';
        $orderarray['header_message_view'] = '';
	} else {
		$vista = reset($vista);
		$view = $vista->slug;
        $orderarray['groupby']                  = get_metadata('view', $vista->term_id, 'group_by_field_view', true);
        $orderarray['orderby']                  = get_metadata('view', $vista->term_id, 'orderby', true);
		$orderarray['order']                    = get_metadata('view', $vista->term_id, 'order', true);
		$orderarray['view_first_only']     = get_metadata('view', $vista->term_id, 'view_first_only_view', true);
		$orderarray['expand_group']        = get_metadata('view', $vista->term_id, 'expand_group_view', true);
		$orderarray['footer_message']      = get_metadata('view', $vista->term_id, 'footer_message_view', true);
		$orderarray['header_message']      = get_metadata('view', $vista->term_id, 'header_message_view', true);
	}             


	$source	= get_post_meta($post->ID, 'fascicoli_source', true);
    $original_post = $post; // questo per riportare dopo il loop di wordpress sul corretto post
	
	$query_array_all = fascicoli_converti_source_array($source, $orderarray['groupby'], $orderarray['orderby'], $orderarray['order']);



    $unordered_resultposts = get_posts($query_array_all);
    // purtroppo non sono in grado di ordinare come serve a me con la sola query.
    // pertanto devo fare un ordinamento a mano


    $groupby =  $orderarray['groupby'];
    $orderby = $orderarray['orderby'];
    $order   = ($orderarray['order']=='ASC')?-1:1;
    $resultposts = usort($unordered_resultposts, function($a, $b) {
        global $groupby;
        global $orderby;
        global $order;

        // verifico a che bruppo appartengono
        if ($a->$groupby == $b->$groupby) {
            // sono dello stesso gruppo
            // ordino per $orderby
            if ($a->$orderby == $b->$orderby) {
                    // gli elementi sono uguali
                    return 0;
            } elseif  ($a->$orderby < $b->$orderby) {
                    // a è minore di b
                    return -$order;
            } else {
                    // a è maggiore di b
                    return $order;
            }
        } elseif ($a->$groupby < $b->$groupby) {
            // il gruppo di a è da visualizzare prima
            return -$order;
        } else {
            // il gruppo di b è da visualizzare prima
            return $order;
        }
    });


    $list = '';
	if (count($resultposts) != 0) {
		
		$list .= '<ul class="fascicoli_ul">';
		//var_dump($resultposts);
		
		$count = 0;
		$old_code = '';
        $old_type = '';

		foreach ($resultposts as $rp) {
            $post = $rp;
            setup_postdata( $post );

            $type = $rp->post_type;

            $revision = __(' posted by ').(get_user_by('id',$rp->post_author)->display_name).__(' at ').$rp->post_date;
            $revision = apply_filters('the_infotext', $revision ,$rp);
            $revision = apply_filters('{$type}_the_infotext', $revision ,$rp);

            $tasks = array(
                '__older' => array ('label'=>__('Older item'),'icon'=> plugins_url('/fascicoli/imgs/older.png')),
                'detail'  => array ('label'=>__('Detail'),'icon'=> plugins_url('/fascicoli/imgs/detail.png')),
            );
            $tasks = apply_filters($type.'_single_tasks_label', $tasks);
			
			$code = get_post_meta($rp->ID, $orderarray['groupby'], true);

            if          (($code!=$old_code) && $count==0) {
                //è il primo elemento in assoluto
                $first = 'first';
            } elseif    (($code!=$old_code) && $count==1) {
                // è il primo elemento di questo codice, ed il codice precedente aveva un solo elemento
                $first = 'first';
                $list .= "<li class='fascicoli older void $old_code fascicoli-{$view} {$old_type}'>no found</li>";
                $count=0; //poi diventa 1 a fine ciclo
            } elseif    (($code!=$old_code) && $count> 1) {
                // è il primo elemento di questo gruppo ed il gruppo precedente aveva più di un elemento
                $first = 'first';
                $count=0; // poi diventa 1 a fine ciclo
                //@TODO mi piacerebbe mettere un 'last' sulla classe precedente, ma non so come
            } else {
                // non è il primo elemento di questo gruppo
                if ($orderarray['expand_group']=='1') {
                    //il gruppo può essere collassato
                    $first = 'older';
                } else {
                    // il gruppo non va collassato
                    $first = 'other';
                }

            }

            $item  = "<span class='fascicoli_code $code $first '>$code</span>";
            $item .= "<h3><a >{$rp->post_title}</a></h3>";
            $item .= "<span class='fascicoli_infotext'>$revision</span>";

            $icons = '<span class="fascicoli_tasks">';
            $forms = '<span class="fascicoli_forms">';

            foreach($tasks as $task_id => $task) {
                $icons .= "<img src='{$task['icon']}' class='$code view_form_{$task_id} noprint task_icon' title='{$task['name']}' onClick=\"toggle_form('{$task_id}','{$code}','{$count}')\">";
                $forms.= "<form class='form_{$task_id} noprint fascicoli' action='' method='post' name='{$code}'>
                            <input type='hidden' name='task' value='{$task_id}' id='task'>
                            <input type='hidden' name='type' value='{$type}' id='type'>
                            ".wp_nonce_field($task_id,'fascicoli_nonce').
                              apply_filters("{$type}_{$task_id}_form", '',$rp)."
                          </form>";
            }
            $icons .= '</span>';
            $forms .= '</span>';

            if ($orderarray['view_first_only']!='0' && $first!='first')
                    $list .= "<li class='fascicoli $code fascicoli-{$view} {$type} {$first}' id='{$code}-{$count}' >".$item.$icons.$forms.'</li>';

			$old_code = $code;
            $old_type = $type;
            $count++;

		}

		$list .= '</ul>';
	}
	
	$header = '<p class="fascicoli_header">'.$orderarray['header_message_view'].'<p>';
	$footer = '<p class="fascicoli_footer">'.$orderarray['footer_message_view'].'<p>';
    $tasks = apply_filters('tasks_label', array());
    $icons ='<span class="fascicoli_general_tasks">';
    $forms = '<span class="fascicoli_general_forms">';
    foreach($tasks as $task_id => $task) {
        $icons .= "<img src='{$task['icon']}' class='$code view_form_{$task_id} noprint' title='{$task['name']}' >";
        $forms.= "<form class='form_{$task_id} noprint' action='' method='post'>".apply_filters("{$type}_{$task_id}_form", '')."</form>";
    }
    $icons .='</span>';
    $forms .= '</span>';


    wp_reset_postdata();
    add_filter('the_content','fascicoli_fascicolo_content');
    return $message.$the_content.$header.$list.$footer.$icons.$forms;
}